package com.algorithm.ch1.cjm.race;

import java.util.Arrays;

/**
 * 翻转图像
 * 给定一个二进制矩阵 A，我们想先水平翻转图像，然后反转图像并返回结果。
 * <p>
 * 水平翻转图片就是将图片的每一行都进行翻转，即逆序。例如，水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。
 * <p>
 * 反转图片的意思是图片中的 0 全部被 1 替换， 1 全部被 0 替换。例如，反转 [0, 1, 1] 的结果是 [1, 0, 0]。
 */
public class FlipAndInvertImage {


    public static void main(String[] args) {

        int[][] nums = new int[][]{{1,1,0}, {1,0,1}, {0,0,0}};

        int[][] ints = flipAndInvertImage(nums);

        for (int i = 0; i < ints.length; i++) {

            System.out.println(Arrays.toString(ints[i]));
        }
    }

    /**
     * 翻转图像
     * @param a
     * @return
     */
    public static int[][] flipAndInvertImage(int[][] a) {

        if(a == null) {
            return null;
        }

        int length = a.length;
        int xLength = a[0].length;

        if(length != xLength || xLength < 1 || xLength > 20) {
            return null;
        }

        //一维
        int y = 0;
        int[][] b = new int [length][length];
        for (int j = length - 1; j >= 0; j--) {

            //二维
            int x = 0;
            for (int i = 0; i < length; i++) {

                b[x][y] = a[i][j] == 0 ? 1 : 0;
                x++;
            }
            y ++;
        }
        return b;
    }
}
